package com.vegetable.modules.controller.approval;

import com.vegetable.common.annotation.ApprovalDataPermission;
import com.vegetable.common.utils.R;
import com.vegetable.modules.controller.AbstractController;
import com.vegetable.modules.entity.wx.po.QueryWXApprovalPO;
import com.vegetable.modules.entity.wx.po.UpdatePaymentStatusPO;
import com.vegetable.modules.service.wx.WXApprovalService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

/**
 * 审批管理控制器
 * 路径：/approval/** 需要OAuth2认证
 * 
 * @author Qoder
 * @since 2025-10-21
 */
@RestController
@Slf4j
@RequestMapping("/approval")
@Api(value = "审批管理", tags = "审批管理")
public class ApprovalManageController extends AbstractController {
    
    @Autowired
    private WXApprovalService wxApprovalService;

    /**
     * 查询审批列表（需要认证）
     * 数据权限控制：
     * - 财务部门（部门ID=5）：可查看所有审批
     * - 其他用户：只能查看自己提交的审批
     * 
     * @param po 查询参数
     * @return 审批列表
     */
    @PostMapping("/list")
    @ApiOperation("查询审批列表")
    @ApprovalDataPermission(type = ApprovalDataPermission.PermissionType.APPROVAL, filterParam = QueryWXApprovalPO.class)
    public R list(@RequestBody QueryWXApprovalPO po) {
        log.info("查询审批列表，参数：{}", po);
        Map<String, Object> result = wxApprovalService.selectList(po);
        return R.data(result);
    }

    /**
     * 手动拉取审批信息
     * 
     * @return 拉取结果
     */
    @PostMapping("/import")
    @ApiOperation("手动拉取审批信息")
    public R importApproval() {
        try {
            log.info("开始手动拉取审批信息");
            wxApprovalService.importFromWX();
            return R.success("审批信息拉取成功");
        } catch (Exception e) {
            log.error("手动拉取审批信息失败", e);
            return R.fail("审批信息拉取失败: " + e.getMessage());
        }
    }
    
    /**
     * 更新付款状态
     * 
     * @param po 更新付款状态参数
     * @return 更新结果
     */
    @PostMapping("/updatePaymentStatus")
    @ApiOperation("更新付款状态")
    public R updatePaymentStatus(@RequestBody UpdatePaymentStatusPO po) {
        try {
            log.info("批量更新付款状态，审批编号数量：{}", po.getSpNoList() != null ? po.getSpNoList().size() : 0);
            boolean result = wxApprovalService.updatePaymentStatus(po);
            if (result) {
                return R.success("付款状态更新成功");
            } else {
                return R.fail("付款状态更新失败，未找到对应的审批记录");
            }
        } catch (Exception e) {
            log.error("批量更新付款状态失败", e);
            return R.fail("更新付款状态失败: " + e.getMessage());
        }
    }
}
